
/**
 * Created with IntelliJ IDEA.
 * Description:实现一个线程池 ->用少量线程执行大量任务
 * <p>
 * 1.用runnable描述任务
 * <p>
 * 2.用一个队列来组织管理任务,可以用阻塞队列
 * <p>
 * 3.提供一个可以向队列中添加任务的方法
 * <p>
 * 4.创建多个线程,不断扫描队列中的任务,有任务的时候取出来执行
 * User: rei
 * Date: 2025-11-17
 * Time: 15:16
 */
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

public class MyThreadPool {
    BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>(100);

    public MyThreadPool(int threadNum) {
        if (threadNum <= 0)
            throw new IllegalArgumentException("线程数量不能为负");
        for (int i = 0; i < threadNum; i++) {
            Thread t = new Thread(() -> {
                //不断取出任务
                while (true) {
                    try {

                        Runnable task = queue.take();
                        task.run();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            });

            t.start();
        }
    }


    public void submit(Runnable task) {
        if (task == null)
            throw new IllegalArgumentException("任务不能为空");

        try {
            queue.put(task);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}
